#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/semaphore.h>

struct semaphore sema;

static int __init semaphore_init(void)
{
    printk("%s...\n", __func__);

    sema_init(&sema, 1);

    printk("sema.count = %d\n", sema.count); // 1

    // 如果当前wait_list为空的话，up函数会对sema.count++
    up(&sema);
    up(&sema);
    up(&sema);
    up(&sema);
    up(&sema);

    printk("sema.count = %d\n", sema.count); // 6 ==> 加了5次

    return 0;
}


static void __exit semaphore_exit(void)
{
    printk("%s...\n", __func__);
}

module_init(semaphore_init);
module_exit(semaphore_exit);
MODULE_LICENSE("Dual BSD/GPL");
